#!/usr/bin/env bash
set -e # 这告诉bash一但有任何一个语句返回非真的值，则退出bash。

PROG_NAME=`basename $0`
PROG_DIR=`dirname $0`
PROG_DIR=`cd "$PROG_DIR" && pwd`

. "$PROG_DIR/vic/log.sh"

function print_help {
    echo -e "Usage: $PROG_NAME [options]"
    echo -e ""
    echo -e "Options:"
    echo -e "  -a AA, --aa=AA"
    echo -e "    A args."
    echo -e ""
    echo -e "  -b [BB], --bb=[BB]"
    echo -e "    B args."
    echo -e ""
    echo -e "  -h, --help"
    echo -e "    Displays help message."
    echo -e ""
}

vic_log_debug "调试信息.."

#-o表示短选项，两个冒号表示该选项有一个可选参数，可选参数必须紧贴选项
#如-carg 而不能是-c arg
#--long表示长选项
#"$@"在上面解释过
# -n:出错时的信息
# -- ：举一个例子比较好理解：
#我们要创建一个名字为 "-f"的目录你会怎么办？
# mkdir -f #不成功，因为-f会被mkdir当作选项来解析，这时就可以使用
# mkdir -- -f 这样-f就不会被作为选项。
CMD_GETOPT=`getopt -o a:b::h --long aa:,bb::,help -n 'example.bash' -- "$@"`
eval set -- "$CMD_GETOPT"
while true ; do
    case "$1" in
        -a|--aa) echo "Option a, argument \`$2'" ; shift 2 ;;
        -b|--bb)
            # b has an optional argument. As we are in quoted mode,
            # an empty parameter will be generated if its optional
            # argument is not found.
            case "$2" in
                "") echo "Option b, no argument"; shift 2 ;;
                *)  echo "Option b, argument \`$2'" ; shift 2 ;;
            esac ;;
        -h|--help) print_help; exit 1 ;;
        --) shift; break ;;
        *) echo "Unknown option: $1"; print_help; exit 1 ;;
    esac
done
echo "Remaining $# arguments:"
for arg do
    echo "-->$arg" ;
done

